// 基类：Serializable
class Serializable {
  // 将对象转换为 JSON 字符串
  toJSON() {
    return JSON.stringify(this);
  }

  // 静态方法：从 JSON 字符串创建对象（需要子类实现具体的解析逻辑）
  static fromJSON(jsonString) {
    const data = JSON.parse(jsonString);
    // 子类需要实现自己的逻辑来从 data 创建实例
    throw new Error('fromJSON must be implemented by subclasses');
  }
}
// 道具对象
class Item {
  constructor({ name, id }) {
    this.name = name;
    this.id = id;
  }
}

// 配方对象
class Recipe extends Serializable {
  constructor({ name, input, output }) {
    super();

    this.name = name;
    this.input = input; // { itemId: quantity }
    this.output = output; // 新道具对象
  }
  getName() {
    return this.name;
  }
  getInput() {
    return this.input;
  }
  getOutput() {
    return this.output;
  }
}

// 玩家背包对象
// class Inventory extends Serializable {
//   constructor() {
//     this.items = {}; // { itemId: quantity }
//   }

//   // 添加道具到背包
//   addItem(item, quantity = 1) {
//     if (!this.items[item.id]) {
//       this.items[item.id] = 0;
//     }
//     this.items[item.id] += quantity;
//   }

//   // 移除道具从背包
//   removeItem(itemId, quantity = 1) {
//     if (this.items[itemId] && this.items[itemId] >= quantity) {
//       this.items[itemId] -= quantity;
//       if (this.items[itemId] === 0) {
//         delete this.items[itemId];
//       }
//       return true;
//     }
//     return false;
//   }

//   // 检查背包中是否有足够的道具
//   hasEnoughItems(requiredItems) {
//     for (const itemId in requiredItems) {
//       if (!this.items[itemId] || this.items[itemId] < requiredItems[itemId]) {
//         return false;
//       }
//     }
//     return true;
//   }

//   // 调用配方进行合成
//   craftRecipe(recipe) {
//     if (this.hasEnoughItems(recipe.requiredItems)) {
//       // 消耗所需道具
//       for (const itemId in recipe.requiredItems) {
//         this.removeItem(itemId, recipe.requiredItems[itemId]);
//       }
//       // 返回新的道具
//       return recipe.resultItem;
//     }
//     return null; // 背包中道具不足，无法合成
//   }
// }

export {
  Item,
  Recipe,
  //  Inventory
};

// 示例用法

// // 创建道具
// const wood = new Item('Wood', 1);
// const stone = new Item('Stone', 2);
// const sword = new Item('Sword', 3);

// // 创建配方
// const swordRecipe = new Recipe(
//   'Sword Recipe',
//   { 1: 5, 2: 3 }, // 需要 5 个 Wood 和 3 个 Stone
//   sword
// );

// // 创建背包并添加道具
// const inventory = new Inventory();
// inventory.addItem(wood, 10);
// inventory.addItem(stone, 5);

// // 调用配方进行合成
// const craftedSword = inventory.craftRecipe(swordRecipe);

// if (craftedSword) {
//   console.log(`成功合成: ${craftedSword.name}`);
//   inventory.addItem(craftedSword, 1); // 将合成的道具添加回背包（可选）
// } else {
//   console.log('道具不足，无法合成');
// }

// // 查看背包中的道具
// console.log('背包中的道具:', inventory.items);
